package com.mzy.basics.utils.Spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * @author Ives
 * * @date 2021/12/27
 */

/**
 * Spring工厂获取spring上下文中的内容 -- 可以单独创建一个springboot项目来体验
 */
public class SpringUtils implements ApplicationContextAware{
  private static ApplicationContext applicationContext;

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    if(SpringUtils.applicationContext == null) {
      SpringUtils.applicationContext = applicationContext;
    }
    System.out.println("---------------------------------------------------------------------");

    System.out.println("---------------------------------------------------------------------");

    System.out.println("---------------me.shijunjie.util.SpringUtil------------------------------------------------------");

    System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringUtils.applicationContext+"========");

    System.out.println("---------------------------------------------------------------------");
  }

  //获取applicationContext
  public static ApplicationContext getApplicationContext() {
    return applicationContext;
  }

  //通过name获取 Bean.
  public static Object getBean(String name){
    return getApplicationContext().getBean(name);
  }

  //通过class获取Bean.
  public static <T> T getBean(Class<T> clazz){
    return getApplicationContext().getBean(clazz);
  }

  //通过name,以及Clazz返回指定的Bean
  public static <T> T getBean(String name,Class<T> clazz){
    return getApplicationContext().getBean(name, clazz);
  }
}
